/**
 * Created by luomingzhong on 17/3/9.
 */
class List {
    constructor() {
        this.listSize = 0;
        this.pos = 0;
        this.dataStore = [];
    }

    //清空数组中所有元素，
    clear() {
        delete  this.dataStore;
        this.dataStore = [];
        this.listSize = this.pos = 0;
    }

    //返回当前位置的元素
    getElement() {
        return this.dataStore[this.pos];
    }

    /**
     *
     * @param element 被插入的元素
     * @param after   列表中的元素
     */
    insert(element, after) {
        let insertPos = this.dataStore.indexOf(after);
        if (insertPos > -1) {
            this.dataStore.splice(insertPos + 1, 0, element);
            ++this.listSize;
            return true;
        }
        return false
    }

    //在列表的末尾添加元素
    append(element) {
        this.dataStore[this.listSize++] = element;
    }

    //从列表中添加元素
    remove(element) {
        let foundAt = this.dataStore.indexOf(element);
        if (foundAt > -1) {
            this.dataStore.splice(foundAt, 1);
            --this.listSize;
            return true;
        }
        return false;
    }

    //将列表的当前位置移动到第一个元素
    front() {
        this.pos = 0;
    }

    //将列表的当前位置移动到最后一个元素
    end() {
        this.pos = this.listSize - 1;
    }

    //当前位置后移一位
    prev() {
        if(this.pos>0){
            --this.pos;
        }
    }

    //当前位置前移一位
    next() {
        if(this.pos<this.listSize-1){
            ++this.pos;
        }
    }

    //返回列表的当前位置
    currPos() {
        return this.pos;
    }

    //将当前位置移动到指定位置
    moveTo(postion) {
        this.pos = postion;
    }

    length() {
        return this.listSize;
    }

    toString() {
        return this.toString();
    }

    //判断给定值是否在列表中
    contains(element) {
        let position = this.dataStore.indexOf(element);
        if (position > -1) {
            return true;
        }
        return false;
    }
}
module.exports = List;
